package com.ingenio.siot.adapter;

import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

import com.ingenio.siot.Adapter;
import com.ingenio.siot.entity.TipoMovil;
import com.mysql.jdbc.Connection;
import com.mysql.jdbc.PreparedStatement;
import com.mysql.jdbc.Statement;

public class TipoMovilAdapter extends Adapter{
	
	public List<TipoMovil> devolverTipoMoviles() throws Exception{
		Connection conn = null;
		PreparedStatement stmt = null;
    	List<TipoMovil> tipoMoviles = new ArrayList<TipoMovil>();
    	
		try {
    		conn = (Connection) abrirConexion();
    		String sel ="SELECT * FROM tiposmoviles where activo=1";
    		stmt = (PreparedStatement) conn.prepareStatement(sel);
    		    		
    		ResultSet result = stmt.executeQuery();
    		TipoMovil tm = null;
    		while(result.next()){
    			Integer id = result.getInt("IdTipoMovil");
    			String descripcion = result.getString("descTipoMovil");
    			String url = result.getString("urlIcono");
    			Float densidad = result.getFloat("densidadPromedio");
    			boolean activo = result.getBoolean("activo");
    			tm = new TipoMovil(id, descripcion, url, densidad, activo);
    			tipoMoviles.add(tm);
    		}
    	}
    	catch (Exception e) {
			e.printStackTrace();
			throw new Exception("Error al conectar con la base de datos.", e);
		}
    	finally{
    		//conn.close();
    		cerrarConexion(conn);
    	}
		return tipoMoviles;
	}
	
	public TipoMovil devolverTipoMovil(Integer id) throws Exception{
		Connection conn = null;
		PreparedStatement stmt = null;
    	TipoMovil tm = null;
    	try {
    		conn = (Connection) abrirConexion();
    		String sel ="SELECT * FROM tiposmoviles WHERE IdTipoMovil = ? and activo=1";
    		stmt = (PreparedStatement) conn.prepareStatement(sel);
    		stmt.setInt(1, id);
    		ResultSet result = stmt.executeQuery();
    		if(result.next()){
    			String descripcion = result.getString("descTipoMovil");
    			String url = result.getString("urlIcono");
    			Float densidad = result.getFloat("densidadPromedio");
    			boolean activo = result.getBoolean("activo");
    			tm = new TipoMovil(id, descripcion, url, densidad, activo);
    		}
    	}
    	catch (Exception e) {
			e.printStackTrace();
			throw new Exception("Error al conectar con la base de datos.", e);
		}
    	finally{
    		//conn.close();
    		cerrarConexion(conn);
    	}
		return tm;
	}
	
	public TipoMovil crearTipoMovil(TipoMovil tipoMovil) throws Exception{
		Connection conn = null;
		PreparedStatement stmt = null;
		TipoMovilAdapter tma = new TipoMovilAdapter();
		TipoMovil tm = null;
		try {
    		conn = (Connection) abrirConexion();
    		String query ="INSERT INTO tiposmoviles(descTipoMovil,urlIcono,densidadPromedio,activo) VALUES(?,?,?,?)";
    		stmt = (PreparedStatement) conn.prepareStatement(query, Statement.RETURN_GENERATED_KEYS);
    		stmt.setString(1,tipoMovil.getDescTipoMovil());
    		stmt.setString(2,tipoMovil.getUrlIcono());
    		stmt.setFloat(3,tipoMovil.getDensidadPromedio());
    		stmt.setBoolean(4,tipoMovil.isActivo());
    		stmt.execute();
    		ResultSet id = stmt.getGeneratedKeys();
    		if (id.next()) {
    			tm = tma.devolverTipoMovil(id.getInt(1));
    		}
    	}
    	catch (Exception e) {
			e.printStackTrace();
			throw new Exception("Error al conectar con la base de datos.", e);
		}
    	finally{
    		cerrarConexion(conn);
    	}
		return tm;
	}
	
	
	public void editarTipoMovil(TipoMovil tipoMovil) throws Exception{
		Connection conn = null;
		PreparedStatement stmt = null;
    	try {
    		conn = (Connection) abrirConexion();
    		String query =  "UPDATE tiposmoviles " +
    						"SET descTipoMovil=?, urlIcono=?, densidadPromedio=?, activo=? " +
    						"WHERE IdTipoMovil=?";
    		stmt = (PreparedStatement) conn.prepareStatement(query);
    		stmt.setString(1,tipoMovil.getDescTipoMovil());
    		stmt.setString(2,tipoMovil.getUrlIcono());
    		stmt.setFloat(3,tipoMovil.getDensidadPromedio());
    		stmt.setBoolean(4,tipoMovil.isActivo());
    		stmt.setInt(5,tipoMovil.getIdTipoMovil());
    		stmt.execute();
    	}
    	catch (Exception e) {
			e.printStackTrace();
			throw new Exception("Error al conectar con la base de datos.", e);
		}
    	finally{
    		cerrarConexion(conn);
    	}
	}
	
	public void eliminarTipoMovil(Integer idTipoMovil) throws Exception{
		Connection conn = null;
		PreparedStatement stmt = null;
    	try {
    		conn = (Connection) abrirConexion();
    		String query =  "UPDATE tiposmoviles SET activo=0 WHERE IdTipoMovil =?";
    		stmt = (PreparedStatement) conn.prepareStatement(query);
    		stmt.setInt(1,idTipoMovil);
    		stmt.execute();
    	}
    	catch (Exception e) {
			e.printStackTrace();
			throw new Exception("Error al conectar con la base de datos.", e);
		}
    	finally{
    		cerrarConexion(conn);
    	}
	}
}
